//
//  main.m
//  06-homework-NSDate
//
//  Created by dllo on 16/7/11.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    // 计算当前时间和一个固定时间的差值,如果差值在60秒内,输出"刚刚",如果在60秒外3600秒内,输出"xx分钟前",如果3600秒外, 3600*24秒内,输出"xx小时前"
    NSDate *now = [NSDate date];
    NSDate *dateFromNow = [NSDate dateWithTimeIntervalSinceNow:3641];
    NSTimeInterval interval = [dateFromNow timeIntervalSinceDate:now];
    
    if (interval <= 60) {
        NSLog(@"刚刚");
    }
    if (interval <= 3600 && interval >60) {
        NSLog(@"%.0f分钟前", interval / 60);
    }
    if (interval <= 3600 * 24 && interval >3600) {
        NSLog(@"%.0f小时前", interval / 3600);
    }
    // 将字符串@"2016年04月01日 01点20分18秒"转换为NSDate对象。
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date = [dateFormatter dateFromString:@"2016-04-01 01:20:18"];
    NSLog(@"%@", date);
    // NSDateFormatter -- 用来在日期和字符串之间转换
    
    // 将1468232420转成日期类型
    //???1468232420
    // 研究NSDateComponents
    
    // NSDateComponents -- 一个封装了具体年月日、时秒分、周、季度等的类
    
    NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *dateComponents = [greCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]];
    NSLog(@"year(年份): %ld", dateComponents.year);
    NSLog(@"quarter(季度):%ld", dateComponents.quarter);
    NSLog(@"month(月份):%ld", dateComponents.month);
    NSLog(@"day(日期):%ld", dateComponents.day);
    NSLog(@"hour(小时):%ld", dateComponents.hour);
    NSLog(@"minute(分钟):%ld", dateComponents.minute);
    NSLog(@"second(秒):%ld", dateComponents.second);
    
    
    // 先定义一个遵循某个历法的日历对象
    NSCalendar *greCalendar1 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // 定义一个NSDateComponents对象，设置一个时间点
    NSDateComponents *dateComponentsForDate = [[NSDateComponents alloc] init];
    [dateComponentsForDate setDay:6];
    [dateComponentsForDate setMonth:5];
    [dateComponentsForDate setYear:2004];
    
    // 根据设置的dateComponentsForDate获取历法中与之对应的时间点
    // 这里的时分秒会使用NSDateComponents中规定的默认数值，一般为0或1。
    NSDate *dateFromDateComponentsForDate = [greCalendar1 dateFromComponents:dateComponentsForDate];
    
    // 定义一个NSDateComponents对象，设置一个时间段
    NSDateComponents *dateComponentsAsTimeQantum = [[NSDateComponents alloc] init];
    [dateComponentsForDate setDay:6];
    
    // 在当前历法下，获取6天后的时间点
    NSDate *dateFromDateComponentsAsTimeQantum = [greCalendar dateByAddingComponents:dateComponentsAsTimeQantum toDate:[NSDate date] options:0];
    // 先定义一个遵循某个历法的日历对象
    NSCalendar *greCalendar2 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    
    // 根据两个时间点，定义NSDateComponents对象，从而获取这两个时间点的时差
    NSDateComponents *dateComponents1 = [greCalendar2 components:NSYearCalendarUnit fromDate:[NSDate dateWithTimeIntervalSince1970:0] toDate:[NSDate date] options:0];
    NSLog(@"number of years:%ld", dateComponents.year);
    return 0;
}
